assume cs:code

code segment
start: 
				;将myfun0_start到myfun0_end之间的代码编译出来的机器指令移动到0000:0020h处
				mov ax, cs
				mov ds, ax
				mov si, offset myfun0_start
				mov ax, 0
				mov es, ax
				mov di, 0200h
				mov cx, offset myfun0_end - myfun0_start
				cld ;设置si di递增
				rep movsb

				;设置中断向量表里面的0号中断项的cs和ip
				mov ax, 0
				mov es, ax
				mov word ptr es:[4 * 0], 0200h ;ip
				mov word ptr es:[4 * 0 + 2], 0 ;cs

				;制造0号中断,除法溢出, al装不下除法的商
				mov ax, 1000h
				mov bh, 1
				div bh

				;0号中断处理函数,会被移动到0000:0200开始的地方
myfun0_start:	jmp short s0 ;这个指令的长度是2
				db "divide error" ;只是数据，并不是指令，所以需要跳过
s0:				mov ax, 0 ;myfun0_start整段代码编译出来的机器指令会被移动到0000:0200开始的地方
				mov ds, ax	
				mov si, 0202h ;0200h + 2 = 0202h
				mov ax, 0B800h	
				mov es, ax
				mov di, 12 * 160 + 34 * 2				
				mov cx, 12 ;字符串的长度是12，所以需要循环12次	
				;输出到屏幕的循环，不要调试，直接通过g指令跳转到mov ax, 4c00h，单步调试输出会有问题，显示不全
s1:				mov al, ds:[si]	
				mov es:[di], al	
				inc di
				mov byte ptr es:[di], 42h ;红底绿字
				inc di
				inc si
				loop s1
				mov ax, 4c00h
				int 21h
myfun0_end:		nop
						
code ends

end start